﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CoVanHocTapData.Concretes;
using CoVanHocTapData.Entities;
using CoVanHocTapProject.Infrastructure;
using CoVanHocTapData.Interface;

namespace CoVanHocTapProject.Controllers
{
    public class ChuongTrinhDaoTaoChuanController : Controller
    {
        //
        // GET: /ChuongTrinhDaoTaoChuan/

        #region repos
        ILopRepository lopRepos = new LopRepository();
        INganhRepository nganhRepos = new NganhDaoTaoRepository();
        IMonHocRepository monHocRepos = new MonHocRepository();
        IChuongTrinhDaoTaoRepository ctdtRepos = new ChuongTrinhDaoTaoRepository();
        IChiTietKhoiCTDTRepository ctKhoiCTDTRepos = new ChiTietKhoiCTDTRepository();
        IKhoiChuongTrinhDaoTaoRepository khoiCTDTRepos = new KhoiChuongTrinhDaoTaoRepository();
        IKetQuaHocRepository ketquahoctapRepos = new KetQuaHocRepository();
        IHocKyRepository hocKyRepos = new HocKyRepository();
        ISinhVien_TichLuyRepository sv_TichLuyRepos = new SinhVien_TichLuyRepositpry();
        IChuanDauRaRepository chuanDauRaRepos = new ChuanDauRaRepository();
        IThangDiemDanhGiaRepository thangDiemRepos = new ThangDiemDanhGiaRepository();

        #endregion

        //public ChuongTrinhDaoTaoChuanController()
        //{
        //    if (mainTree != null)
        //    {
        //        if (mainTree.hocKyHienTai != null || mainTree.hocKyHienTai != 0)
        //        {
        //            if (mainTree.HocKyTNList != null)
        //            {
        //                for (int i = 0; i < mainTree.HocKyTNList.Count; i++)
        //                {
        //                    if (mainTree.HocKyTNList[i].Value.Equals(mainTree.HocKySVChon.ToString()))
        //                    {
        //                        mainTree.HocKyTNList[i].Selected = true;
        //                        break;
        //                    }
        //                }
        //            }
        //        }
        //    }
        //}

        public ActionResult Index()
        {

            if (Publics.sinhVienDangNhap == null)
            {
                return View();
            }

            string nganhID = nganhRepos.LayMaNganh(Publics.sinhVienDangNhap.LopID);
            //var nganhDaoTao = nganhRepos.LayNganhDaoTaoTheoNganh(nganhID);

            var ctdtList = ctdtRepos.LayChuongTrinhDaoTaoChuan(nganhID, Publics.sinhVienDangNhap.Lop.NienKhoaID.Value, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);

            List<MonHocTheoHocKy> monHocList = new List<MonHocTheoHocKy>();
            foreach (var ctdtItem in ctdtList)
            {
                if (!ctdtItem.TuChon.Value || ctdtItem.TuChon == null)
                    monHocList.Add(monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID, ctdtItem.HocKy, nganhID));
            }

            //hien thi mh trog khoi tu chon
            List<string> tenKhoiCTDT = new List<string>();
            IQueryable<KhoiChuongTrinhDaoTao> khoiCTDT = null;
            int nienKhoaID = Publics.sinhVienDangNhap.Lop.NienKhoaID.Value;
            int i = 0;
            while (true)
            {

                khoiCTDT = khoiCTDTRepos.LayKhoiCTDT(nganhID, nienKhoaID - i, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);
                if (khoiCTDT.Count() > 0)
                    break;
                i++;
            }
            foreach (var khoiItem in khoiCTDT)
            {
                string hocKy;
                //if (khoiItem.HocKys == null)
                //    hocKy = 0;
                //else
                //    hocKy = khoiItem.HocKy.Value;
                var ctKhoiCTDT = ctKhoiCTDTRepos.layChiTietKhoiCTDT(nganhID, khoiItem.ID, khoiItem.HocKys);



                foreach (var chiTietItem in ctKhoiCTDT)
                {

                    if (tenKhoiCTDT.IndexOf(chiTietItem.TenKhoiMonTuChon) == -1)
                        tenKhoiCTDT.Add(chiTietItem.TenKhoiMonTuChon);

                    monHocList.Add(chiTietItem);
                }
            }

            foreach (var monHocItem in monHocList)
            {
                monHocItem.TenKhoiMonTuChonList = tenKhoiCTDT;
            }

            return View(monHocList);

        }

        public ActionResult LoTrinhHocTapChiTiet()
        {
            if (Publics.sinhVienDangNhap == null)
            {
                return View();
            }
            return View();
        }


        public JsonResult LoTrinhHocTapChiTietUC()
        {

            string nganhID = Publics.sinhVienDangNhap.Lop.NganhID; //nganhRepos.LayMaNganh(Publics.sinhVienDangNhap.LopID);
            //var nganhDaoTao = nganhRepos.LayNganhDaoTaoTheoNganh(nganhID);

            var ctdtList = ctdtRepos.LayChuongTrinhDaoTao(nganhID, Publics.sinhVienDangNhap.Lop.NienKhoaID.Value, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);

            List<MonHocTheoHocKy> monHocList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocBatBuocList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocTuChonList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocTuChonTree = new List<MonHocTheoHocKy>();

            int tongTCDatBatBuoc = 0;
            int tongTCDatTuChon = 0, tongTCTuChon = 0;

            HanDaoTao hanDaoTao = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(nganhID, Publics.sinhVienDangNhap.Lop.HeDaoTaoID).FirstOrDefault();
            int thoiGianToiDa = int.Parse(hanDaoTao.SoNamHoc.Value.ToString()) * 2;

            var hocKyTheoNamHocHienTaiList = hocKyRepos.LayHocKyTheoNam(Publics.hocKyHienTai.NamHoc.Value);
            int hocKyCuaNam = 0;
            if (hocKyTheoNamHocHienTaiList.Count() == 2)
                hocKyCuaNam = 2;
            else if (hocKyTheoNamHocHienTaiList.Count() == 1)
                hocKyCuaNam = 1;

            float thoiGianDaoTao = hanDaoTao.SoNamHoc.Value + hanDaoTao.SoNamToiDaQuaHan.Value;
            int hocKyConLai = (Publics.sinhVienDangNhap.Lop.NienKhoaID.Value + int.Parse(thoiGianDaoTao.ToString()) - Publics.hocKyHienTai.NamHoc.Value) * 2 + hocKyCuaNam;


            int hocKyHienTai = 0; //hoc ky hien tai trong cac hky chinh                        
            

            float hocKyDaoTao = (hanDaoTao.SoNamHoc.Value + hanDaoTao.SoNamToiDaQuaHan.Value) * 2;
            if (Publics.hocKyHienTai.NamHoc.Value - Publics.sinhVienDangNhap.Lop.NienKhoaID.Value == 0)
                hocKyHienTai = hocKyCuaNam;
            else
                hocKyHienTai = (Publics.hocKyHienTai.NamHoc.Value - Publics.sinhVienDangNhap.Lop.NienKhoaID.Value) * 2 + hocKyCuaNam;


            //mh bat buoc            
            for (int hocky = 1; hocky <= thoiGianToiDa; hocky++)
            {
                float tongTCDatTheoHocKy = 0; //tin chi dat
                float tongTCTheoHocKy = 0; //tong tin chi hoc ky
                foreach (var ctdtItem in ctdtList)
                {
                    if (ctdtItem.HocKy != null)
                    {
                        if (!ctdtItem.TuChon.Value && int.Parse(ctdtItem.HocKy) == hocky)
                        {
                            MonHocTheoHocKy mHocItem = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID, ctdtItem.HocKy, nganhID);
                            var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(ctdtItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                            KetQuaHoc ketQuaHTSV = new KetQuaHoc();
                            if (kqhtList.Count() > 0)
                            {
                                if (kqhtList.Count() > 1)
                                {
                                    ketQuaHTSV = ketquahoctapRepos.LayKetQuaCaoNhat(kqhtList.ToList());
                                }
                                else
                                    ketQuaHTSV = kqhtList.FirstOrDefault();
                                if (ketQuaHTSV.DTB != null)
                                {
                                    if (ketQuaHTSV.DTB.Value >= 5)
                                    {
                                        tongTCDatBatBuoc += int.Parse(ketQuaHTSV.MonHoc.SoDVHocTap.Value.ToString());
                                        mHocItem.CoKQHT = true;
                                        mHocItem.DTB = ketQuaHTSV.DTB.Value;
                                        mHocItem.DVHT = ketQuaHTSV.MonHoc.SoDVHocTap.Value;
                                        tongTCDatTheoHocKy += mHocItem.DVHT;
                                    }
                                }
                                else
                                    mHocItem.CoKQHT = false;
                            }
                            monHocBatBuocList.Add(mHocItem);
                            tongTCTheoHocKy += mHocItem.DVHT;
                        }
                    }
                }

                foreach (var item in monHocBatBuocList)
                {
                    if (int.Parse(item.HocKy) == hocky)
                    {
                        item.TongTCDatTheoHocKy1 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy1 = tongTCTheoHocKy;
                        break;
                    }
                    
                }

            }
            //hien thi mh trog khoi tu chon
            List<string> tenKhoiCTDT = new List<string>();
            IQueryable<KhoiChuongTrinhDaoTao> khoiCTDT = null; //= khoiCTDTRepos.LayKhoiCTDT(nganhID, Publics.sinhVienDangNhap.Lop.NienKhoaID.Value, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);
            int nienKhoaID = Publics.sinhVienDangNhap.Lop.NienKhoaID.Value;
            int demTang = 0;
            while (true)
            {

                khoiCTDT = khoiCTDTRepos.LayKhoiCTDT(nganhID, nienKhoaID - demTang, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);
                if (khoiCTDT.Count() > 0)
                    break;
                demTang++;
            }


            MonHocTheoHocKy thongtinData = new MonHocTheoHocKy(); //thong tin de tooltip      

            List<MonHocTheoHocKy> dsMHKhacKhoi = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> dsMHChungKhoi = new List<MonHocTheoHocKy>();

            MonHocTheoHocKy khacKhoiTree = new MonHocTheoHocKy();
            MonHocTheoHocKy chungKhoiTree = new MonHocTheoHocKy();
            
            foreach (var khoiItem in khoiCTDT)
            {
                tongTCDatTuChon = 0;
                var ctKhoiCTDT = ctKhoiCTDTRepos.layChiTietKhoiCTDT(nganhID, khoiItem.ID, khoiItem.HocKys);

                string tenKhoi = "";
                tenKhoi = khoiItem.TenKhoiMonHoc;
                
                if (khoiItem.LoaiKhoi == 0) //khoi luan van
                {
                    foreach (var chiTietItem in ctKhoiCTDT)
                    {

                        if (chiTietItem.CungNhom == 0)
                            dsMHKhacKhoi.Add(chiTietItem);
                        else
                            dsMHChungKhoi.Add(chiTietItem);
                    }

                    foreach (var chungKhoiItem in dsMHChungKhoi)
                    {
                        var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(chungKhoiItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                        float soDVHTTheoMHoc = 0; //hien thi so tin chi
                        bool flag = false; //ghi dau dtb mh cua sv > 5 : true
                        foreach (var kqItem in kqhtList)
                        {
                            if (kqItem.DTB != null && kqItem.DTB.Value >= 5)
                            {
                                flag = true;
                                tongTCDatTuChon += int.Parse(kqItem.MonHoc.SoDVHocTap.Value.ToString());

                                break;
                            }
                        }
                        soDVHTTheoMHoc = monHocRepos.LayMonHocTheoMaMH(chungKhoiItem.MonHocID).SoDVHocTap.Value;
                        MonHocTheoHocKy tuChonTreeChildren = new MonHocTheoHocKy();
                        if (flag)
                        {
                            tuChonTreeChildren = new MonHocTheoHocKy()
                            {

                                TenKhoiMonTuChon = "Khối ",
                                id = "tuchonCK" + chungKhoiItem.MonHocID,
                                name = "<p style='background-color: #4CC417'>" + chungKhoiItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + chungKhoiItem.TenMonHoc + "</p></p>",
                                data = new object(),
                                children = null
                            };
                        }
                        else
                        {
                            tuChonTreeChildren = new MonHocTheoHocKy()
                            {

                                TenKhoiMonTuChon = "Khối ",
                                id = "tuchonCK" + chungKhoiItem.MonHocID,
                                name = chungKhoiItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px'>" + chungKhoiItem.TenMonHoc + "</p>",
                                data = new object(),
                                children = null
                            };
                        }

                        tongTCTuChon += int.Parse(monHocRepos.LayMonHocTheoMaMH(chungKhoiItem.MonHocID).SoDVHocTap.Value.ToString());
                        monHocTuChonList.Add(tuChonTreeChildren);
                    }
                    chungKhoiTree.id = "chungkhoi";
                    chungKhoiTree.name = "<br/>Nhóm";
                    chungKhoiTree.children = monHocTuChonList.ToArray();

                    monHocTuChonList = new List<MonHocTheoHocKy>();
                    foreach (var khacKhoiItem in dsMHKhacKhoi)
                    {

                        var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(khacKhoiItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                        float soDVHTTheoMHoc = 0; //hien thi so tin chi
                        bool flag = false; //ghi dau dtb mh cua sv > 5 : true
                        foreach (var kqItem in kqhtList)
                        {
                            if (kqItem.DTB != null && kqItem.DTB.Value >= 5)
                            {
                                flag = true;
                                tongTCDatTuChon += int.Parse(kqItem.MonHoc.SoDVHocTap.Value.ToString());

                                break;
                            }
                        }
                        soDVHTTheoMHoc = monHocRepos.LayMonHocTheoMaMH(khacKhoiItem.MonHocID).SoDVHocTap.Value;
                        MonHocTheoHocKy tuChonTreeChildren = new MonHocTheoHocKy();
                        if (flag)
                        {
                            tuChonTreeChildren = new MonHocTheoHocKy()
                            {

                                TenKhoiMonTuChon = "<br/>" + tenKhoi,
                                id = "tuchon" + khacKhoiItem.MonHocID,
                                name = "<p style='background-color: #4CC417'>" + khacKhoiItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + khacKhoiItem.TenMonHoc + "</p></p>",
                                data = new object(),
                                children = null
                            };
                        }
                        else
                        {
                            tuChonTreeChildren = new MonHocTheoHocKy()
                            {

                                TenKhoiMonTuChon = "<br/>" + tenKhoi,
                                id = "tuchon" + khacKhoiItem.MonHocID,
                                name = khacKhoiItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px'>" + khacKhoiItem.TenMonHoc + "</p>",
                                data = new object(),
                                children = null
                            };
                        }

                        tongTCTuChon += int.Parse(monHocRepos.LayMonHocTheoMaMH(khacKhoiItem.MonHocID).SoDVHocTap.Value.ToString());
                        monHocTuChonList.Add(tuChonTreeChildren);
                        //khacKhoiTree.id = "khackhoi"+khacKhoiItem.MonHocID;
                        //khacKhoiTree.name = "Khối ";
                        //khacKhoiTree.children = monHocTuChonList.ToArray();
                    }
                    dsMHKhacKhoi = new List<MonHocTheoHocKy>();
                    dsMHKhacKhoi = monHocTuChonList;
                    //khacKhoiTree.id = "khackhoi";
                    //khacKhoiTree.name = "Khối ";
                    //khacKhoiTree.children = monHocTuChonList.ToArray();

                    monHocTuChonList = new List<MonHocTheoHocKy>();
                    monHocTuChonList.Add(chungKhoiTree);
                    foreach (var mhKhacItem in dsMHKhacKhoi)
                    {
                        monHocTuChonList.Add(mhKhacItem);
                    }


                    MonHocTheoHocKy khoiTuChonTree = new MonHocTheoHocKy()
                    {
                        id = "khoituchon" + khoiItem.ID,
                        name = "<br/>"+tenKhoi,
                        data = null,
                        children = monHocTuChonList.ToArray()
                    };
                    monHocTuChonTree.Add(khoiTuChonTree);
                }
                else
                {
                    tongTCTuChon = 0;
                    monHocTuChonList = new List<MonHocTheoHocKy>();
                    //List<int> tongTCKhoiTuChon =new List<int>(); //ds so tc sv dat tuong ung hoi tu chon
                    foreach (var chiTietItem in ctKhoiCTDT)
                    {
                        //if (tenKhoiCTDT.IndexOf(chiTietItem.TenKhoiMonTuChon) == -1)
                        //    tenKhoiCTDT.Add(chiTietItem.TenKhoiMonTuChon);

                        tenKhoi = khoiItem.TenKhoiMonHoc;


                        var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(chiTietItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                        if(kqhtList.Count()>0)
                            chiTietItem.DTB = ketquahoctapRepos.LayKetQuaCaoNhat(kqhtList.ToList()).DTB.Value;
                        float soDVHTTheoMHoc = 0; //hien thi so tin chi
                        bool flag = false; //ghi dau dtb mh cua sv > 5 : true
                        foreach (var kqItem in kqhtList)
                        {
                            if (kqItem.DTB != null && kqItem.DTB.Value >= 5)
                            {
                                flag = true;
                                tongTCDatTuChon += int.Parse(kqItem.MonHoc.SoDVHocTap.Value.ToString());

                                break;
                            }
                        }
                        soDVHTTheoMHoc = monHocRepos.LayMonHocTheoMaMH(chiTietItem.MonHocID).SoDVHocTap.Value;
                        MonHocTheoHocKy tuChonTreeChildren = new MonHocTheoHocKy();
                        if (flag)
                        {
                            MonHocTheoHocKy thongtinTuChon = new MonHocTheoHocKy()
                            {
                                id = "tttuchonDau",
                                name = "Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" đã hoàn thành với ĐTB là "+chiTietItem.DTB,
                            };
                            tuChonTreeChildren = new MonHocTheoHocKy()
                            {

                                TenKhoiMonTuChon = tenKhoi,
                                id = "tuchon" + chiTietItem.MonHocID,
                                name = "<p style='background-color: #4CC417'>" + chiTietItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + chiTietItem.TenMonHoc + "</p></p>",
                                data = thongtinTuChon,
                                children = null
                            };
                        }
                        else
                        {
                            string monHocRotThongBao="";
                            if (chiTietItem.DTB == 0)
                                monHocRotThongBao = "Môn học này sinh viên " + Publics.sinhVienDangNhap.MSSV + " chưa hoàn thành";
                            else
                                monHocRotThongBao = "Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" chưa hoàn thành với ĐTB là "+chiTietItem.DTB;
                            MonHocTheoHocKy thongtinTuChon = new MonHocTheoHocKy()
                            {
                                id = "tttuchonRot",
                                name = monHocRotThongBao,
                            };
                            tuChonTreeChildren = new MonHocTheoHocKy()
                            {

                                TenKhoiMonTuChon = tenKhoi,
                                id = "tuchon" + chiTietItem.MonHocID,
                                name = chiTietItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px'>" + chiTietItem.TenMonHoc + "</p>",
                                data = thongtinTuChon,
                                children = null
                            };
                        }

                        tongTCTuChon += int.Parse(monHocRepos.LayMonHocTheoMaMH(chiTietItem.MonHocID).SoDVHocTap.Value.ToString());
                        monHocTuChonList.Add(tuChonTreeChildren);
                    }

                    thongtinData = new MonHocTheoHocKy()
                    {
                        id = "khoituchondata",
                        name = "Sinh viên đạt " + tongTCDatTuChon + "/" + tongTCTuChon + " tín chỉ",
                        children = null,
                        data = null
                    };

                    MonHocTheoHocKy khoiTuChonTree = new MonHocTheoHocKy()
                    {
                        id = "khoituchon" + khoiItem.ID,
                        name = "<b valign='middle'>" + tenKhoi + "</b>",
                        data = thongtinData,
                        children = monHocTuChonList.ToArray()
                    };
                    monHocTuChonTree.Add(khoiTuChonTree);
                }
            }

            MonHocTheoHocKy mainTree;
            MonHocTheoHocKy tempTree;
            List<MonHocTheoHocKy> treeChildren = new List<MonHocTheoHocKy>(); //cay chung cac hk
            List<MonHocTheoHocKy> treeChildrenHK1 = new List<MonHocTheoHocKy>(); //hk1
            //List<MonHocTheoHocKy> treeChildrenHK2 = new List<MonHocTheoHocKy>(); //hk2
            //List<MonHocTheoHocKy> treeChildrenHK3 = new List<MonHocTheoHocKy>(); //hk3
            //List<MonHocTheoHocKy> treeChildrenHK4 = new List<MonHocTheoHocKy>(); //hk4
            //List<MonHocTheoHocKy> treeChildrenHK5 = new List<MonHocTheoHocKy>(); //hk5
            //List<MonHocTheoHocKy> treeChildrenHK6 = new List<MonHocTheoHocKy>(); //hk6
            //List<MonHocTheoHocKy> treeChildrenHK7 = new List<MonHocTheoHocKy>(); //hk7
            //List<MonHocTheoHocKy> treeChildrenHK8 = new List<MonHocTheoHocKy>(); //hk8

            MonHocTheoHocKy batbuocMHDauData = new MonHocTheoHocKy();

            for (int hocKy = 1; hocKy <= thoiGianToiDa; hocKy++)
            {
                int i = 1;
                treeChildrenHK1 = new List<MonHocTheoHocKy>();
                
                foreach (var item in monHocBatBuocList)
                {
                    
                    if (int.Parse(item.HocKy) == hocKy)
                    {
                        tempTree = item;
                        tempTree.id = "bb" + hocKy.ToString() + i.ToString();
                        tempTree.children = null;
                        if (item.CoKQHT && item.DTB >= 5)
                        {
                            batbuocMHDauData = new MonHocTheoHocKy()
                            {
                                id = "dauMH",
                                name = "Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" đã hoàn thành với ĐTB là "+item.DTB,
                                children = null
                            };
                            tempTree.data = batbuocMHDauData;
                            tempTree.name = "<p style='background-color: #4CC417'>" + item.MonHocID + " - " + item.DVHT + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + item.TenMonHoc + "</p></p>";
                            treeChildrenHK1.Add(tempTree);
                        }
                        else
                        {
                            string monHocRotStr = "";
                            if (item.DTB == 0)
                                monHocRotStr = "Môn học này sinh viên " + Publics.sinhVienDangNhap.MSSV + " cần phải hoàn thành";
                            else
                                monHocRotStr = "Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" chưa hoàn thành với ĐTB là "+item.DTB;
                            batbuocMHDauData = new MonHocTheoHocKy()
                            {
                                id = "kdauMH",
                                name = monHocRotStr,
                                children = null
                            };
                            tempTree.name = item.MonHocID + " - " + item.DVHT + "<p style='font-size:10px'>" + item.TenMonHoc + "</p>";
                            tempTree.data = batbuocMHDauData;
                            treeChildrenHK1.Add(tempTree);
                        }
                        i++;
                    }
                    
                }
                
                MonHocTheoHocKy tempMonHoc =treeChildrenHK1.FirstOrDefault();
                    
                
                thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
                {
                    id = "khoibbhockydata",
                    name = "Sinh viên đạt " + tempMonHoc.TongTCDatTheoHocKy1 + "/" + tempMonHoc.TongTCTheoHocKy1 + " tín chỉ",
                    children = null,
                    data = null
                };
                MonHocTheoHocKy hk1Tree = null;
                if (hocKy == hocKyHienTai)
                {
                    thongtinData.name += "<br/>Là học kỳ hiện tại";
                    hk1Tree = new MonHocTheoHocKy()
                    {
                        id = "hk" + hocKy.ToString(),
                        name = "<br/><b style ='color: #800000'>" + "Học kỳ " + hocKy + "</b>",
                        data = thongtinData,
                        children = treeChildrenHK1.ToArray()
                    };
                }
                else
                {
                    hk1Tree = new MonHocTheoHocKy()
                    {
                        id = "hk" + hocKy.ToString(),
                        name = "<br/><b >" + "Học kỳ " + hocKy + "</b>",
                        data = thongtinData,
                        children = treeChildrenHK1.ToArray()
                    };
                }
                treeChildren.Add(hk1Tree);

            }

            
            thongtinData = new MonHocTheoHocKy()
            {
                id = "batbuoctreedata",
                name = "Sinh viên phải hoàn thành các môn bắt buộc quy định",
                children = null,
                data = null
            };

            MonHocTheoHocKy batbuocTree = new MonHocTheoHocKy()
            {
                id = "batbuocTree",
                name = "<br/>Môn học bắt buộc",
                data = thongtinData,
                children = treeChildren.ToArray()
            };

            thongtinData = new MonHocTheoHocKy()
            {
                id = "batbuoctreedata",
                name = "Sinh viên phải hoàn thành tối thiểu số tín chỉ theo từng phần tự chọn theo quy định",
                children = null,
                data = null
            };

            MonHocTheoHocKy tuchonTree = new MonHocTheoHocKy()
            {
                id = "tuchonTree",
                name = "<br/>Môn học tự chọn",
                data = thongtinData,
                children = monHocTuChonTree.ToArray()
            };

            treeChildren = new List<MonHocTheoHocKy>();

            treeChildren.Add(batbuocTree);
            treeChildren.Add(tuchonTree);

            string gioitinh = Publics.sinhVienDangNhap.Phai.Value == true ? "Nữ" : "Nam";

            //string lopID = Publics.sinhVienDangNhap.LopID;
            

            thongtinData = new MonHocTheoHocKy()
            {
                id = "lop",
                name = "Lớp: " + Publics.sinhVienDangNhap.LopID + "<br/>Giới tính: " +
                gioitinh + "<br/>Ngày sinh: " + Publics.sinhVienDangNhap.NgaySinh.Value.ToShortDateString()
                + "<br/>Lần đăng nhập cuối: " + Publics.sinhVienDangNhap.LanDangNhapGanNhat.Value.ToShortDateString()
                + "<br/>Thời gian đào tạo còn: " + hocKyConLai + " học kỳ chính.",

                children = null,
                data = null
            };


            mainTree = new MonHocTheoHocKy()
            {
                id = "root",
                name = "<b>" + Publics.sinhVienDangNhap.MSSV + " - " + Publics.sinhVienDangNhap.HoLot + " " + Publics.sinhVienDangNhap.Ten + "</b>",
                //+ "<hr/><br/>" + "Giới tính: " + gioitinh + "<br/>" + Publics.sinhVienDangNhap.NgaySinh.Value.ToShortDateString()
                //+ "<br/>" + Publics.sinhVienDangNhap.LanDangNhapGanNhat.Value.ToShortDateString(),

                //thongtin = "Lớp: " + lopID, //new List<string>() { gioitinh, Publics.sinhVienDangNhap.LopID, Publics.sinhVienDangNhap.NgaySinh.Value.ToShortDateString(), Publics.sinhVienDangNhap.LanDangNhapGanNhat.Value.ToShortDateString() },
                data = thongtinData,
                children = treeChildren.ToArray()
            };


            return Json(mainTree, JsonRequestBehavior.AllowGet);
        }

        static List<SelectListItem> hocKyTNList;
        static List<SelectListItem> luanVanTNList;
        public ActionResult LoTrinhHocVuotHocCham()
        {
            if (Publics.sinhVienDangNhap == null)
                return RedirectToAction("Index", "TrangChu");

            hocKyTNList = new List<SelectListItem>();
            luanVanTNList = new List<SelectListItem>();
            SinhVien sv = Publics.sinhVienDangNhap;
            string nganhID = sv.Lop.NganhID;
            string heDaoTaoID = sv.Lop.HeDaoTaoID;
            int nienKhoaID = sv.Lop.NienKhoaID.Value;


            IChuanDauRaRepository chuanDauRaRepos = new ChuanDauRaRepository();

            SinhVien_TichLuy sv_TichLuy = sv_TichLuyRepos.LaySinhVienTichLuy(sv.MSSV, nganhID, heDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
            if (sv_TichLuy.TinChiTichLuy == null)
            {
                sv_TichLuy.TinChiTichLuy = ketquahoctapRepos.TinhSoTCTichLuy(sv, nganhID, heDaoTaoID);
                sv_TichLuyRepos.UpdateSinhVienTichLuy(sv_TichLuy);
            }
            int soTCTL = sv_TichLuy.TinChiTichLuy.Value; //so tctl cua sv

            int tongSoTC2HKDau = 0;
            List<int> hocKyList = new List<int>(); //2 hoc ky dau cua ctdt
            hocKyList.Add(1);
            hocKyList.Add(2);
            var ctdtTheoHocKy = ChuongTrinhDaoTaoTheoHocKyRepository.LayCTDTTheoHocKy(nganhID, heDaoTaoID, nienKhoaID, hocKyList);
            foreach (var item in ctdtTheoHocKy)
            {
                tongSoTC2HKDau += item.TongSoTCTheoHocKy.Value;
            }

            var chuanDauRa = chuanDauRaRepos.LayChuanDauRaTinChi(nganhID, nienKhoaID, heDaoTaoID, 0);
            int tongSoTCCTDT = int.Parse(chuanDauRa.FirstOrDefault().GiaTri);
            int soTCCanHoanThanh = 0;

            if (soTCTL <= tongSoTC2HKDau)
                soTCCanHoanThanh = tongSoTCCTDT - tongSoTC2HKDau;
            else
                soTCCanHoanThanh = tongSoTCCTDT - soTCTL;

            var hanDaoTao = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(nganhID, heDaoTaoID).FirstOrDefault();
            int hocKyTNToiDa = (int)(hanDaoTao.SoNamHoc.Value + hanDaoTao.SoNamToiDaQuaHan.Value) * 2;
            mainTree = new MonHocTheoHocKy();

            //hocKyTNList[0].Selected = true;

            luanVanTNList = new List<SelectListItem>()
            {
                new SelectListItem{Text="Làm luận văn", Value="0",Selected=true},
                new SelectListItem{Text ="Thi Tốt nghiệp", Value="1"}
            };

            //MonHocTheoHocKy result = new MonHocTheoHocKy();
            mainTree.HocKyTNList = new List<SelectListItem>();
            for (int i = 6; i <= hocKyTNToiDa; i++)
            {
                //SelectListItem item = null;
                if (i == 6)
                {
                    SelectListItem item = new SelectListItem()
                    {
                        Text = i.ToString(),
                        Value = i.ToString(),
                        Selected = true
                    };
                    mainTree.HocKyTNList.Add(item);
                }
                else
                {
                    SelectListItem item = new SelectListItem()
                    {
                        Text = i.ToString(),
                        Value = i.ToString(),

                    };
                    mainTree.HocKyTNList.Add(item);
                }


            }

            

            //result.HocKyTNList = hocKyTNList;
            mainTree.LuaChonLuanVanThiTN = luanVanTNList;
            mainTree.HienThiDDL = true;
            return View(mainTree);
        }


        public static MonHocTheoHocKy mainTree { get; set; }
        
        [HttpPost]
        public ActionResult LoTrinhHocVuotHocCham(FormCollection form,string hocky)
        {
            if (mainTree == null || Publics.sinhVienDangNhap == null)
                RedirectToAction("Index", "TrangChu");
            
            int hkyValue = int.Parse(form["HocKyTNList"].ToString());
            int hinhThucThiValue =  int.Parse(form["HinhThucThiTN"].ToString());

            mainTree = new MonHocTheoHocKy();
            mainTree.HocKyTNList = new List<SelectListItem>();
            

            mainTree.HocKyTNList = hocKyTNList;
            int vitri = 0;
            for (vitri = 0; vitri < mainTree.HocKyTNList.Count; vitri++)
            {
                if (int.Parse(mainTree.HocKyTNList[vitri].Value) == hkyValue)
                {
                    mainTree.HocKyTNList[vitri].Selected = true;
                    
                    hocKyTNList[vitri].Selected = true;
                    break;
                }
                //else
                //    mainTree.HocKyTNList[vitri].Selected = false;
            }

            //mainTree.HocKyTNList[vitri].Selected = true;            
            mainTree.LuaChonLuanVanThiTN = luanVanTNList;
            if (hinhThucThiValue == 0)
            {
                mainTree.LuaChonLuanVanThiTN[0].Selected = true;
                mainTree.HinhThucThiSVChon = mainTree.LuaChonLuanVanThiTN[0].Text;
                mainTree.LuaChonLuanVanThiTN[1].Selected = false;
            }
            else
            {
                mainTree.LuaChonLuanVanThiTN[1].Selected = true;
                mainTree.HinhThucThiSVChon = mainTree.LuaChonLuanVanThiTN[1].Text;
                mainTree.LuaChonLuanVanThiTN[0].Selected = false;
            }
            mainTree.HocKySVChon = hkyValue;
            


            SinhVien sv = Publics.sinhVienDangNhap;
            string nganhID = sv.Lop.NganhID;
            string heDaoTaoID = sv.Lop.HeDaoTaoID;
            int nienKhoaID = sv.Lop.NienKhoaID.Value;


            float hocKyHienTai = 0; //hoc ky hien tai trong cac hky chinh

            var hanDaoTao = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(nganhID, heDaoTaoID).FirstOrDefault();
            var hocKyTheoNamHocHienTaiList = hocKyRepos.LayHocKyTheoNam(Publics.hocKyHienTai.NamHoc.Value);
            int hocKyCuaNam = 0;
            if (hocKyTheoNamHocHienTaiList.Count() == 2)
                hocKyCuaNam = 2;
            else if (hocKyTheoNamHocHienTaiList.Count() == 1)
                hocKyCuaNam = 1;

            float hocKyDaoTao = (hanDaoTao.SoNamHoc.Value + hanDaoTao.SoNamToiDaQuaHan.Value) * 2;
            if (Publics.hocKyHienTai.NamHoc.Value - nienKhoaID == 0)
                hocKyHienTai = hocKyCuaNam;
            else
                hocKyHienTai = (Publics.hocKyHienTai.NamHoc.Value - nienKhoaID) * 2 + hocKyCuaNam;

            if (hkyValue - hocKyHienTai <= 0)
            {
                mainTree.ViewError = "Học kỳ hiện tại là học kỳ " + hocKyHienTai + ". Do đó, không thể chọn học kỳ này để học vượt hay học chậm tiến độ ";
                mainTree.ViewTree = false;
                return View(mainTree);
            }
            if (hkyValue > (hanDaoTao.SoNamHoc.Value * 2 + 1) && hinhThucThiValue == 0)
            {
                mainTree.ViewError = "Lưu ý:<br/>";
                mainTree.ViewError += "&nbsp;&nbsp;Nếu sinh viên học vượt trước học kỳ " + (hanDaoTao.SoNamHoc.Value * 2 ) + " thì sinh viên làm đơn để được xét làm luận trước thời hạn hoặc làm luận văn theo đúng tiến độ là học kỳ " + hanDaoTao.SoNamHoc * 2 + "<br/>Sau thời gian đó thì sinh viên không được làm luận văn dù đủ điều kiện làm luận văn.";
                mainTree.ViewTree = false;
                return View(mainTree);
            }



            mainTree.hocKyHienTai = hocKyHienTai;

            if (!sv_TichLuyRepos.KiemTraSinhVienTichLuy(sv.MSSV, nganhID, heDaoTaoID, Publics.hocKyHienTai.HocKyID))
            {
                sv_TichLuyRepos.ThemSinhVienTichLuy(sv, nganhID, heDaoTaoID, Publics.hocKyHienTai.HocKyID);
            }
            SinhVien_TichLuy sv_TichLuy = sv_TichLuyRepos.LaySinhVienTichLuy(sv.MSSV, nganhID, heDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
            int soTCTL = sv_TichLuy.TinChiTichLuy.Value;

            var chuanDauRa = chuanDauRaRepos.LayChuanDauRaTinChi(nganhID, nienKhoaID, heDaoTaoID, 0);
            int tongSoTCCTDT = int.Parse(chuanDauRa.FirstOrDefault().GiaTri);
            int soTCCanHoanThanh = 0;


            soTCCanHoanThanh = tongSoTCCTDT - soTCTL -7; //- 7 tc thi TN hoac LV


            int hocKyTNToiDa = (int)(hanDaoTao.SoNamHoc.Value + hanDaoTao.SoNamToiDaQuaHan.Value) * 2;

            var thangDiem = thangDiemRepos.LayThangDiemDanhGia((float)sv_TichLuy.TrungBinhTichLuy.Value).FirstOrDefault();//de lay so tin chi ma sv dky toi da
            int soHocKy;
            if (hinhThucThiValue == 0)//lam luan van
            {
                mainTree.LamLuanVan = true;
                if (hkyValue % 2 == 0)
                {
                    soHocKy = hkyValue - 2 - int.Parse(hocKyHienTai.ToString());
                }
                else
                {
                    soHocKy = hkyValue - 1 - int.Parse(hocKyHienTai.ToString());
                }
            }
            else
            {
                soHocKy = hkyValue -1 - int.Parse(hocKyHienTai.ToString());
            }
            int tinChiTrungBinh = 0;
            if (soHocKy != 0)
            {
                if ((soTCCanHoanThanh % soHocKy)  != 0)
                    tinChiTrungBinh += 1;       
                tinChiTrungBinh += soTCCanHoanThanh / soHocKy;
            }
            mainTree.SoTinChiTrungBinh = tinChiTrungBinh;
            if (tinChiTrungBinh >= thangDiem.SoTCToiThieu && tinChiTrungBinh < thangDiem.SoTCToiDa)
            {
                mainTree.SoTinChiToiDa = thangDiem.SoTCToiDa.Value;
                mainTree.ViewError = "";
                mainTree.ViewTree = true;
            }
            else
            {
                mainTree.ViewError = "<p style='color:Red; font-size:14px; font-weight:bold'>Lưu ý</p>";
                string error = "";
                if (mainTree.LuaChonLuanVanThiTN[0].Selected)
                    error = " hình thức thi là Luận văn";
                else
                    error = " hình thức thi là Thi cuối khoá (Thi tốt nghiệp)";
                string hocVuot = "";
                if (mainTree.HocKySVChon > hanDaoTao.SoNamHoc * 2)
                    hocVuot = " học chậm tiến độ";
                else
                    hocVuot = " học vượt tiến độ";
                if (tinChiTrungBinh < thangDiem.SoTCToiThieu)
                {

                    mainTree.ViewError += "<p style='color:Red; font-size:14px;'>&nbsp;&nbsp;Sinh viên không thể" + hocVuot + " với" + error + " đến học kỳ " + mainTree.HocKySVChon + " vì thời gian sinh viên chọn quá dài nên số tín chỉ trung bình sinh viên đăng ký thấp hơn "+thangDiem.SoTCToiThieu+" tín chỉ.</p>";
                }
                else
                {
                    var thangDiem2 = thangDiemRepos.LayThangDiemDanhGia(tinChiTrungBinh).FirstOrDefault();

                    mainTree.ViewError += "<p style='color:Red; font-size:14px;'>&nbsp;&nbsp;Sinh viên <b>" + sv.MSSV + "</b> có điểm trung bình tích luỹ: <b>" + Math.Round(sv_TichLuy.TrungBinhTichLuy.Value, 2) + "</b> thuộc diện học lực <b>" + thangDiem.XepLoai + ".</b><br/>&nbsp;&nbsp;Nên, sinh viên chỉ có thể đăng ký tối thiểu <b>" + thangDiem.SoTCToiThieu + "</b> tín chỉ và tối đa <b>" + thangDiem.SoTCToiDa + "</b> tín chỉ trong một học kỳ.";
                    mainTree.ViewError += "<br/><br/>&nbsp;&nbsp;Muốn" + hocVuot + error + " và tốt nghiệp ở học kỳ " + hkyValue + " thì sinh viên phải<br />đăng ký tối thiểu <b>" + tinChiTrungBinh + "</b> tín chỉ trong một học kỳ.";

                    if (thangDiem2 != null)
                        mainTree.ViewError += "<br/><br/>&nbsp;&nbsp;Do đó, sinh viên muốn" + hocVuot + " thì sinh viên phải cải thiện điểm trung bình tích lũy tối thiểu mức " + thangDiem2.XepLoai + " hoặc sinh viên có thể chọn hình thức thi là Thi tốt nghiệp hoặc chọn học kỳ " + (hanDaoTao.SoNamHoc * 2 + 1) + " là học kỳ làm luận văn theo đúng tiến độ.</p>";
                    else
                        mainTree.ViewError += "<br/><br/>&nbsp;&nbsp;Do đó, sinh viên chỉ có thể thi tốt nghiệp hoặc thực hiện luận văn theo đúng thời hạn.</p>";
                }

                
                mainTree.ViewTree = false;
            }

            mainTree.HienThiDDL = false;
            return View(mainTree);
        }



        public JsonResult LoTrinhHocVuotHocChamUC()
        {

            SinhVien sv = Publics.sinhVienDangNhap;
            if (mainTree == null || !mainTree.ViewTree)
            {
                return Json(null);
            }

            IRangBuocMonRepository rangBuocMonRepos = new RangBuocMonRepository();


            if (!sv_TichLuyRepos.KiemTraSinhVienTichLuy(sv.MSSV, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID))
            {
                sv_TichLuyRepos.ThemSinhVienTichLuy(sv, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID);
            }
            SinhVien_TichLuy sv_tichLuyNganhChinh = sv_TichLuyRepos.LaySinhVienTichLuy(sv.MSSV, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
            List<MonHocTheoHocKy> treeChildren = new List<MonHocTheoHocKy>();

            ChuanDauRa chuanDauRa = chuanDauRaRepos.LayChuanDauRaTinChi(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID, 0).FirstOrDefault();

            // var thangDiemDanhGia = thangDiemRepos.LayThangDiemDanhGia(float.Parse(sv_tichLuyNganhChinh.TrungBinhTichLuy.Value.ToString()));

            //int DangKySoTCToiDa = thangDiemDanhGia.FirstOrDefault().SoTCToiDa.Value;

            int soTinChiPhaiHoanThanh = int.Parse(chuanDauRa.GiaTri) - sv_tichLuyNganhChinh.TinChiTichLuy.Value;

            HanDaoTao hanDaoTaoSV = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(sv.Lop.NganhID, sv.Lop.HeDaoTaoID).FirstOrDefault();
            float tongSoHocKyChinh = hanDaoTaoSV.SoNamHoc.Value * 2;

            //var ketQuaHocSv = ketquahoctapRepos.LayTatCaKetQuaMonKhongTrungCuaSinhVien(sv);

            //var chuongTrinhDaoTaoList = ctdtRepos.LayChuongTrinhDaoTao(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID);
            List<MonHocRotTheoHocKy> MaMHRotList = new List<MonHocRotTheoHocKy>();

            List<KhoiTuChonEntity> khoiTuChonDauList = new List<KhoiTuChonEntity>();

            int countKhoiTuChonTheoHocKy = 0; //khi 1 hoc ky da hoc va co diem thi ghi nhan lai

            List<string> AddedTruocList = new List<string>();//nhug mon da hoc va co diem
            List<string> AddTienQuyetList = new List<string>(); //nhug mon dau
            List<string> AddedPassSubjectList = new List<string>();//ds mh tu chon da pass

            float tongTCDenThoiDiemHienTai = 0; //tong so tin chi den hoc ky hien tai cua sinh vien
            for (int hocKy = 1; hocKy < mainTree.HocKySVChon ; hocKy++)
            {
                List<MonHocTheoHocKy> monHocTheoHocKyTree = new List<MonHocTheoHocKy>();
                var ctdtTheoHocKyList = ctdtRepos.LayChuongTrinhDaoTaoTheoHocKy(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID, hocKy.ToString());

                float tongSoTCTheoHocKy = 0; //ktra so tc cua mon hoc dc them vao co vuot qua so tc dky trug bih ko

                int demSoLanKhoi = 0;//muc dich chi add 1 lan khoi tu chon
                List<MonHoc> AddedMonHocList = new List<MonHoc>(); //song hanh
                foreach (var ctdtItem in ctdtTheoHocKyList)
                {
                    KetQuaHoc ketQuaSV = ketquahoctapRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(ctdtItem.MonHocID, sv.MSSV);
                    if (hocKy < mainTree.hocKyHienTai)
                    {
                        if (ketQuaSV != null)
                        {
                            if (ketQuaSV.DTB.Value >= 5)
                            {
                                MonHoc mHoc = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID);
                                tongSoTCTheoHocKy += mHoc.SoDVHocTap.Value;

                                MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                {
                                    id = "dataMH" + ctdtItem.MonHocID,
                                    name = "Môn học này đã hoàn thành"
                                };

                                MonHocTheoHocKy item = new MonHocTheoHocKy()
                                {
                                    id = "mh" + ctdtItem.MonHocID,
                                    name = "<p style='background-color: #4CC417'>" + mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + mHoc.TenMonHoc + "</p></p>",
                                    data = dataItem,
                                    children = null
                                };
                                monHocTheoHocKyTree.Add(item);
                                AddTienQuyetList.Add(mHoc.MonHocID);
                            }
                            else
                            {
                                MonHocRotTheoHocKy rotItem = new MonHocRotTheoHocKy()
                                {
                                    MonHocRot = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID),
                                    HocKy = hocKy
                                };
                                MaMHRotList.Add(rotItem);
                                AddedTruocList.Add(ctdtItem.MonHocID);
                            }
                        }
                        else
                        {
                            
                            MonHocRotTheoHocKy rotItem = new MonHocRotTheoHocKy()
                            {
                                MonHocRot = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID),
                                HocKy = hocKy
                            };
                            MaMHRotList.Add(rotItem);
                            
                        }



                    }
                    else
                    {
                        if (hocKy < mainTree.hocKyHienTai) //hoc ky dag xet nho hon hky htai thi hien thi ds mon sv da hoc va dau
                        {
                            MonHoc mHoc = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID);
                            
                            MonHocTheoHocKy item = new MonHocTheoHocKy()
                            {
                                id = "mh" + ctdtItem.MonHocID,
                                name = mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoc.TenMonHoc,
                                data = null,
                                children = null
                            };
                            monHocTheoHocKyTree.Add(item);
                        }
                        else //tu hky hien tai tro ve sau
                        {
                            if (tongSoTCTheoHocKy <= mainTree.SoTinChiTrungBinh)
                            {
                                if (MaMHRotList.Count > 0) //add mon rot vao truoc
                                {
                                    if (hocKy % 2 == 0) //hocky la so le thi lay nhug mon rot cua hoc ky le truoc do gan vao hoc ky nay
                                    {
                                        List<MonHocRotTheoHocKy> tempList = new List<MonHocRotTheoHocKy>();//= MaMHRotList;
                                        foreach (var item in MaMHRotList)
                                            tempList.Add(item);
                                        foreach (var rotItem in tempList)
                                        {
                                            if (rotItem.HocKy % 2 == 0)
                                            {
                                                MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                                {
                                                    id = "dataitem",
                                                    name ="Môn học phải hoàn thành",
                                                };
                                                MonHocTheoHocKy item = new MonHocTheoHocKy()
                                                {
                                                    id = "mh" + rotItem.MonHocRot.MonHocID,
                                                    name = rotItem.MonHocRot.MonHocID + " - " + rotItem.MonHocRot.SoDVHocTap.Value + "<br/>" + rotItem.MonHocRot.TenMonHoc,
                                                    data = dataItem,
                                                    children = null
                                                };
                                                monHocTheoHocKyTree.Add(item);
                                                AddedMonHocList.Add(rotItem.MonHocRot);
                                                MaMHRotList.Remove(rotItem);
                                                tongSoTCTheoHocKy += rotItem.MonHocRot.SoDVHocTap.Value;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        List<MonHocRotTheoHocKy> tempList = new List<MonHocRotTheoHocKy>();
                                        foreach (var item in MaMHRotList)
                                            tempList.Add(item);
                                        foreach (var rotItem in tempList)
                                        {
                                            if (rotItem.HocKy % 2 != 0)
                                            {
                                                MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                                {
                                                    id = "dataitem",
                                                    name = "Môn học phải hoàn thành",
                                                };
                                                MonHocTheoHocKy item = new MonHocTheoHocKy()
                                                {
                                                    id = "mh" + rotItem.MonHocRot.MonHocID,
                                                    name = rotItem.MonHocRot.MonHocID + " - " + rotItem.MonHocRot.SoDVHocTap.Value + "<br/>" + rotItem.MonHocRot.TenMonHoc,
                                                    data = dataItem,
                                                    children = null
                                                };
                                                monHocTheoHocKyTree.Add(item);
                                                AddedMonHocList.Add(rotItem.MonHocRot);
                                                MaMHRotList.Remove(rotItem);
                                                tongSoTCTheoHocKy += rotItem.MonHocRot.SoDVHocTap.Value;
                                            }
                                        }
                                    }
                                }
                                //add mon hoc trog ctdt
                                MonHoc mHoc = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID);
                                if (AddedMonHocList.IndexOf(mHoc) == -1)
                                {
                                    KetQuaHoc kq = ketquahoctapRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(ctdtItem.MonHocID, sv.MSSV);
                                    if (kq != null)
                                    {
                                        if (kq.DTB.Value >= 5)
                                        {
                                            //MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                            //{
                                            //    id = "dataitem",
                                            //    name = "Môn học phải hoàn thành",
                                            //};
                                            MonHocTheoHocKy item2 = new MonHocTheoHocKy()
                                            {
                                                id = "mh" + ctdtItem.MonHocID,
                                                name = "<p style='background-color: #4CC417'>" + mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + mHoc.TenMonHoc + "</p></p>",
                                                //name = mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoc.TenMonHoc,
                                                data = null,
                                                children = null
                                            };
                                            monHocTheoHocKyTree.Add(item2);
                                        }
                                        else
                                        {
                                            MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                            {
                                                id = "dataitem",
                                                name = "Môn học phải hoàn thành",
                                            };
                                            MonHocTheoHocKy item2 = new MonHocTheoHocKy()
                                            {
                                                id = "mh" + ctdtItem.MonHocID,
                                                //name = "<p style='background-color: #4CC417'>" + mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + "<br/>" + mHoc.TenMonHoc + "</p></p>",
                                                name = mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoc.TenMonHoc,
                                                data = dataItem,
                                                children = null
                                            };
                                            monHocTheoHocKyTree.Add(item2);
                                        }
                                    }
                                    else
                                    {
                                        MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                        {
                                            id = "dataitem",
                                            name = "Môn học phải hoàn thành",
                                        };
                                        MonHocTheoHocKy item2 = new MonHocTheoHocKy()
                                        {
                                            id = "mh" + ctdtItem.MonHocID,
                                            //name = "<p style='background-color: #4CC417'>" + mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + "<br/>" + mHoc.TenMonHoc + "</p></p>",
                                            name = mHoc.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoc.TenMonHoc,
                                            data = null,
                                            children = null
                                        };
                                        monHocTheoHocKyTree.Add(item2);
                                    }


                                    AddedMonHocList.Add(mHoc);//add de ktra sog hanh
                                    tongSoTCTheoHocKy += mHoc.SoDVHocTap.Value;
                                }


                                //add mon cua hoc ky chan/le ke tiep - kiem tra rag buoc mon
                                if (tongSoTCTheoHocKy <= mainTree.SoTinChiTrungBinh)
                                {
                                    int hocKyNext = hocKy + 2;
                                    if (hocKyNext <= tongSoHocKyChinh)
                                    {
                                        var ctdtHocKyKeTiep = ctdtRepos.LayChuongTrinhDaoTaoTheoHocKy(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID, hocKyNext.ToString());
                                        foreach (var ctdtNextItem in ctdtHocKyKeTiep)
                                        {
                                            float soTCTemp = tongSoTCTheoHocKy;
                                            MonHoc mHoctemp = monHocRepos.LayMonHocTheoMaMH(ctdtNextItem.MonHocID);
                                            List<string> strSongHanh = new List<string>(), strTruoc = new List<string>(), strTienQuyet = new List<string>();
                                            if (rangBuocMonRepos.LayMonRangBuoc(ctdtNextItem.MonHocID, sv.Lop.NganhID, out strSongHanh, out strTienQuyet, out strTruoc))
                                            {
                                                if (strTruoc.Count > 0)
                                                {
                                                    foreach (var truocItem in strTruoc)
                                                    {
                                                        if (AddedTruocList.IndexOf(truocItem) != -1)
                                                        {
                                                            soTCTemp += mHoctemp.SoDVHocTap.Value;
                                                            if (soTCTemp <= mainTree.SoTinChiTrungBinh) //neu them mon hoc ma van nam trong gioi han so tin chi trung binh thi moi add
                                                            {
                                                                MonHocTheoHocKy monHocNext = new MonHocTheoHocKy()
                                                                {
                                                                    id = "monhocnext" + mHoctemp.MonHocID,
                                                                    name = mHoctemp.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoctemp.TenMonHoc,
                                                                    data = null,
                                                                    children = null
                                                                };
                                                                tongSoTCTheoHocKy += mHoctemp.SoDVHocTap.Value;
                                                                AddedMonHocList.Add(mHoctemp);
                                                                monHocTheoHocKyTree.Add(monHocNext);
                                                            }
                                                            else
                                                                continue;
                                                        }
                                                    }
                                                }
                                                if (strTienQuyet.Count > 0)
                                                {
                                                    foreach (var tienQuyetItem in strTienQuyet)
                                                    {
                                                        if (AddTienQuyetList.IndexOf(tienQuyetItem) != -1)
                                                        {
                                                            soTCTemp += mHoctemp.SoDVHocTap.Value;
                                                            if (soTCTemp <= mainTree.SoTinChiTrungBinh) //neu them mon hoc ma van nam trong gioi han so tin chi trung binh thi moi add
                                                            {
                                                                MonHocTheoHocKy monHocNext = new MonHocTheoHocKy()
                                                                {
                                                                    id = "monhocnext" + mHoctemp.MonHocID,
                                                                    name = mHoctemp.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoctemp.TenMonHoc,
                                                                    data = null,
                                                                    children = null
                                                                };
                                                                tongSoTCTheoHocKy += mHoctemp.SoDVHocTap.Value;
                                                                AddedMonHocList.Add(mHoctemp);
                                                                monHocTheoHocKyTree.Add(monHocNext);
                                                            }
                                                            else
                                                                continue;
                                                        }
                                                    }
                                                }
                                                if (strSongHanh.Count > 0)
                                                {
                                                    foreach (var songHanhItem in strSongHanh)
                                                    {
                                                        MonHoc mHocSongHanh = monHocRepos.LayMonHocTheoMaMH(songHanhItem);
                                                        if (AddedMonHocList.IndexOf(mHocSongHanh) != -1)
                                                        {
                                                            soTCTemp += mHoctemp.SoDVHocTap.Value;
                                                            if (soTCTemp <= mainTree.SoTinChiTrungBinh) //neu them mon hoc ma van nam trong gioi han so tin chi trung binh thi moi add
                                                            {
                                                                MonHocTheoHocKy monHocNext = new MonHocTheoHocKy()
                                                                {
                                                                    id = "monhocnext" + mHoctemp.MonHocID,
                                                                    name = mHoctemp.MonHocID + " - " + mHoc.SoDVHocTap.Value + "<br/>" + mHoctemp.TenMonHoc,
                                                                    data = null,
                                                                    children = null
                                                                };
                                                                tongSoTCTheoHocKy += mHoctemp.SoDVHocTap.Value;
                                                                AddedMonHocList.Add(mHoctemp);
                                                                monHocTheoHocKyTree.Add(monHocNext);
                                                            }
                                                            else
                                                                continue;
                                                        }
                                                    }
                                                }
                                            }


                                        }
                                    }
                                }


                                //end add mon cua hoc ky chan/le


                            }//end khi tog so tin chi <= so tin chi trung binh
                        }

                    }

                }//ket thuc for ctdt

                //nam ngoai hoc ky chinh trog ctdt
                               

                //khoi tu chon
                //add cac mon khoi tu chon
                var khoiTuChonList = khoiCTDTRepos.LayKhoiCTDT(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID, hocKy, false);
                KhoiTuChonEntity khoiTuChonEntity = null;
                foreach (var khoiTuChonItem in khoiTuChonList)
                {
                    khoiTuChonEntity = new KhoiTuChonEntity()
                    {
                        KhoiTuChonID = khoiTuChonItem.ID,
                        TongSoTinChi = khoiTuChonItem.TongSoTC.Value,
                        TongSoTinChiDau = 0
                    };
                    bool ktra = false;
                    foreach (var khoi2 in khoiTuChonDauList)
                    {
                        if (khoi2.KhoiTuChonID == khoiTuChonEntity.KhoiTuChonID)
                        {
                            ktra = true;
                            break;
                        }
                    }
                    if (!ktra)
                        khoiTuChonDauList.Add(khoiTuChonEntity);
                }

                //add cac mon khoi tu chon neu dau hoac add khoi tu chon

                if (hocKy < mainTree.hocKyHienTai)//if nho hon hoc ky hien tai thi hien thi cac mon trong khoi tu chon da pass
                {


                    //add cac mon khoi tu chon
                    // var khoiTuChonList = khoiCTDTRepos.LayKhoiCTDT(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID, hocKy, false);
                    //KhoiTuChonEntity khoiTuChonEntity = null;
                    foreach (var khoiTuChonItem in khoiTuChonList)
                    {
                        //khoiTuChonEntity = new KhoiTuChonEntity()
                        //{
                        //    KhoiTuChonID = khoiTuChonItem.ID,
                        //    TongSoTinChi = khoiTuChonItem.TongSoTC.Value,
                        //    TongSoTinChiDau = 0
                        //};
                        //if(khoiTuChonDauList.IndexOf(khoiTuChonEntity)==-1)
                        //    khoiTuChonDauList.Add(khoiTuChonEntity);

                        float tongSoTCDauKhoiTuChon = 0; //tong so tin chi cac mon hoc da dau trong khoi tu chon

                        var chitietKhoi = ctKhoiCTDTRepos.LayDanhSachCungKhoiCTDT(khoiTuChonItem.ID);
                        foreach (var chitietItem in chitietKhoi)
                        {
                            if (AddedPassSubjectList.IndexOf(chitietItem.MonHocID) != -1)
                                continue;
                            HocKy hocKyDangXet = hocKyRepos.LayHocKyTheoHocKy(sv.Lop.NienKhoaID.Value, hocKy).FirstOrDefault();
                            KetQuaHoc ketQuaMH = null;
                            if (hocKyDangXet != null && !ketquahoctapRepos.KiemTraMonHocCuaSVTaiHocKy(chitietItem.MonHocID, sv, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, hocKyDangXet.HocKyID, out ketQuaMH))
                            {
                                continue;
                            }
                            //KetQuaHoc ketQuaMH = ketquahoctapRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(chitietItem.MonHocID, sv.MSSV);
                            if (ketQuaMH != null)
                            {
                                if (ketQuaMH.DTB.Value >= 5)
                                {
                                    tongSoTCDauKhoiTuChon += ketQuaMH.MonHoc.SoDVHocTap.Value;
                                    MonHocTheoHocKy monHocPassTuChonData = new MonHocTheoHocKy()
                                    {
                                        id = "mhtcPassData" + chitietItem.MonHocID,
                                        name = "Đã hoàn thành " + ketQuaMH.MonHoc.SoDVHocTap.Value + " tín chỉ của khối " + khoiTuChonItem.TenKhoiMonHoc

                                    };
                                    MonHocTheoHocKy monHocPassTuChon = new MonHocTheoHocKy()
                                    {
                                        id = "mhtcPass" + chitietItem.MonHocID,
                                        name = "<p style='background-color: #F87431'>" + chitietItem.MonHocID + " - " + chitietItem.MonHoc.SoDVHocTap.Value + "<p style='font-size:10px; background-color: #F87431; height:30px'>" + chitietItem.MonHoc.TenMonHoc + "</p></p>",
                                        data = monHocPassTuChonData,
                                        children = null
                                    };
                                    monHocTheoHocKyTree.Add(monHocPassTuChon);
                                    AddedPassSubjectList.Add(chitietItem.MonHocID);
                                    tongSoTCTheoHocKy += ketQuaMH.MonHoc.SoDVHocTap.Value;

                                    foreach (var tuchonEntityItem in khoiTuChonDauList)
                                    {
                                        if (tuchonEntityItem.KhoiTuChonID == khoiTuChonItem.ID)
                                        {
                                            tuchonEntityItem.TongSoTinChiDau += tongSoTCDauKhoiTuChon;
                                            break;
                                        }
                                    }

                                }
                            }
                        }

                    }

                }
                else
                {
                    //add mon hoc bat buoc
                    if (tongSoTCTheoHocKy <= mainTree.SoTinChiTrungBinh && demSoLanKhoi == 0)
                    {
                        if (MaMHRotList.Count > 0)
                        {
                            if (hocKy % 2 == 0) //hocky la so le thi lay nhug mon rot cua hoc ky le truoc do gan vao hoc ky nay
                            {
                                List<MonHocRotTheoHocKy> tempList = new List<MonHocRotTheoHocKy>();//= MaMHRotList;
                                foreach (var item in MaMHRotList)
                                    tempList.Add(item);
                                foreach (var rotItem in tempList)
                                {
                                    if (tongSoTCTheoHocKy > mainTree.SoTinChiTrungBinh)
                                        break;
                                    if (rotItem.HocKy % 2 == 0)
                                    {
                                        MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                        {
                                            id = "dataitem",
                                            name = "Môn học phải hoàn thành",
                                        };
                                        MonHocTheoHocKy item = new MonHocTheoHocKy()
                                        {
                                            id = "mh" + rotItem.MonHocRot.MonHocID,
                                            name = rotItem.MonHocRot.MonHocID + " - " + rotItem.MonHocRot.SoDVHocTap.Value + "<br/>" + rotItem.MonHocRot.TenMonHoc,
                                            data = dataItem,
                                            children = null
                                        };
                                        monHocTheoHocKyTree.Add(item);
                                        AddedMonHocList.Add(rotItem.MonHocRot);
                                        MaMHRotList.Remove(rotItem);
                                        tongSoTCTheoHocKy += rotItem.MonHocRot.SoDVHocTap.Value;
                                    }
                                }
                            }
                            else
                            {
                                List<MonHocRotTheoHocKy> tempList = new List<MonHocRotTheoHocKy>();
                                foreach (var item in MaMHRotList)
                                    tempList.Add(item);
                                foreach (var rotItem in tempList)
                                {
                                    if (tongSoTCTheoHocKy > mainTree.SoTinChiTrungBinh)
                                        break;
                                    if (rotItem.HocKy % 2 != 0)
                                    {
                                        MonHocTheoHocKy dataItem = new MonHocTheoHocKy()
                                        {
                                            id = "dataitem",
                                            name = "Môn học phải hoàn thành",
                                        };
                                        MonHocTheoHocKy item = new MonHocTheoHocKy()
                                        {
                                            id = "mh" + rotItem.MonHocRot.MonHocID,
                                            name = rotItem.MonHocRot.MonHocID + " - " + rotItem.MonHocRot.SoDVHocTap.Value + "<br/>" + rotItem.MonHocRot.TenMonHoc,
                                            data = dataItem,
                                            children = null
                                        };
                                        monHocTheoHocKyTree.Add(item);
                                        AddedMonHocList.Add(rotItem.MonHocRot);
                                        MaMHRotList.Remove(rotItem);
                                        tongSoTCTheoHocKy += rotItem.MonHocRot.SoDVHocTap.Value;
                                    }
                                }
                            }
                        }
                    }

                    //add khoi tu chon

                    int soHocKyTruocLamLV = 0;

                    if (tongSoTCTheoHocKy <= mainTree.SoTinChiTrungBinh && demSoLanKhoi == 0)
                    {
                        //var khoiTuChonList = khoiCTDTRepos.LayKhoiCTDT(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID, hocKy, false);

                        foreach (var khoiTuChonItem in khoiTuChonList)
                        {
                            //float TongSoTinChiTungKhoi = 0;//tinh tong tin chi dc them vao hoc ky co vuot qua so tin chi khoi tu chon quy dinh khong

                            if (khoiTuChonItem.LoaiKhoi != null)
                            {
                                if (khoiTuChonItem.LoaiKhoi.Value == 0)
                                {
                                    if (hocKy == mainTree.HocKySVChon - 1)
                                    {
                                        string svChonTN = "";
                                        foreach (var strItem in mainTree.LuaChonLuanVanThiTN)
                                        {
                                            if (strItem.Selected == true)
                                            {
                                                svChonTN = strItem.Text;
                                                break;
                                            }
                                        }
                                        MonHocTheoHocKy ttip = new MonHocTheoHocKy()
                                        {
                                            id = "ttip",
                                            name = svChonTN
                                        };
                                        MonHocTheoHocKy khoiTuChonNode = new MonHocTheoHocKy()
                                        {
                                            id = "khoitc" + hocKy.ToString() + khoiTuChonItem.ID.ToString(),
                                            name = "<br/>" + khoiTuChonItem.TenKhoiMonHoc + "<br/>",
                                            data = ttip,
                                            children = null
                                        };
                                        monHocTheoHocKyTree.Add(khoiTuChonNode);
                                        tongSoTCTheoHocKy += khoiTuChonItem.SoTCBatBuoc.Value;
                                    }
                                }
                            }

                            if (hocKy != mainTree.HocKySVChon - 1)
                                soHocKyTruocLamLV = mainTree.HocKySVChon - 1 - int.Parse(mainTree.hocKyHienTai.ToString());

                            MonHocTheoHocKy thongtinNode = null;
                            float soTCSVTichLuy = 0;


                            int vitriKhoi = -1; //vi tri trong khoi tu chon cac mon hoc dau
                            for (int i = 0; i < khoiTuChonDauList.Count; i++)
                            {
                                if (khoiTuChonDauList[i].KhoiTuChonID == khoiTuChonItem.ID)
                                {
                                    soTCSVTichLuy = khoiTuChonDauList[i].TongSoTinChiDau;
                                    vitriKhoi = i;
                                    break;
                                }
                            }
                            float soTinChiConLaiDeDangKy = mainTree.SoTinChiTrungBinh - tongSoTCTheoHocKy; //so tin chi con lai de dang ky toi tin chi

                            if (soTinChiConLaiDeDangKy != 0 && soTCSVTichLuy < khoiTuChonItem.SoTCBatBuoc) //neu chua hoan thanh khoi tu chon thi moi them khoi
                            {
                                if (soTCSVTichLuy != 0)
                                    countKhoiTuChonTheoHocKy++;
                                float soTCPhaiHoanThanhKhoi = 0;
                                if (khoiTuChonItem.SoTCBatBuoc != null)
                                    soTCPhaiHoanThanhKhoi = khoiTuChonItem.SoTCBatBuoc.Value - soTCSVTichLuy;

                                //if (soTCPhaiHoanThanhKhoi > 3 && hocKy != mainTree.HocKySVChon - 1 && soTCPhaiHoanThanhKhoi % soHocKyTruocLamLV == 0)
                                //    soTCPhaiHoanThanhKhoi = soTCPhaiHoanThanhKhoi / soHocKyTruocLamLV; //so tin chi trung binh dk
                                //string[] hocKySplit = khoiTuChonItem.HocKys.Split(',');

                                float soTinChiDangKy = 0;
                                if (soTCPhaiHoanThanhKhoi > soTinChiConLaiDeDangKy)
                                {
                                    soTinChiDangKy = soTinChiConLaiDeDangKy;

                                }
                                else
                                {
                                    soTinChiDangKy = soTCPhaiHoanThanhKhoi;
                                }
                                if (vitriKhoi != -1)
                                    khoiTuChonDauList[vitriKhoi].TongSoTinChiDau += soTinChiDangKy;

                                if (soTCPhaiHoanThanhKhoi == 0)
                                    continue;

                                if (khoiTuChonItem.LoaiKhoi != null)
                                {
                                    if (khoiTuChonItem.LoaiKhoi == 0)
                                        soTinChiDangKy = khoiTuChonItem.SoTCBatBuoc.Value;
                                }

                                //if(vitriKhoi!=-1)
                                //    khoiTuChonDauList[vitriKhoi].TongSoTinChiDau += soTinChiDangKy;

                                thongtinNode = new MonHocTheoHocKy()
                                {
                                    id = "ttkhoitc" + khoiTuChonItem.ID,
                                    name = "Sinh viên phải đăng ký khối tự chọn này tối thiểu " + soTinChiDangKy + " tín chỉ<br/>" + "Sinh viên nên kiểm tra các môn học trong khối tự chọn để đăng ký cho đủ số tín chỉ quy định. <br/>Số tín chỉ tối thiểu của khối tự chọn chỉ mang tính gợi ý vì không đảm bảo học kỳ cho phép sinh viên đăng ký có đủ số tín chỉ như gợi ý.",
                                    data = null,
                                    children = null
                                };
                                MonHocTheoHocKy khoiTuChonNode = new MonHocTheoHocKy()
                                {
                                    id = "khoitc" + hocKy.ToString() + khoiTuChonItem.ID.ToString(),
                                    name = "<br/>" + khoiTuChonItem.TenKhoiMonHoc + "<br/>",
                                    data = thongtinNode,
                                    children = null
                                };
                                monHocTheoHocKyTree.Add(khoiTuChonNode);
                                tongSoTCTheoHocKy += soTinChiDangKy;


                            }
                            demSoLanKhoi++;
                        }

                    }


                    //end add khoi tu chon
                }

                if (hocKy < mainTree.hocKyHienTai)
                    tongTCDenThoiDiemHienTai += tongSoTCTheoHocKy;

                //add mon bb (dag o hk3 thi add them mon hk5)
                MonHocTheoHocKy hocKyTree = new MonHocTheoHocKy();
                MonHocTheoHocKy hocKyDataTree = new MonHocTheoHocKy();

                if (hocKy == mainTree.hocKyHienTai)
                {
                    hocKyDataTree = new MonHocTheoHocKy()
                    {
                        id = "hockyData" + hocKy.ToString(),
                        name = "Là học kỳ hiện tại.<br/>Tổng số tín chỉ đã hoàn thành đến học kỳ hiện tại là " + tongTCDenThoiDiemHienTai + "<br/>Tổng số tín chỉ cần hoàn thành trong học kỳ " + hocKy.ToString() + " là " + tongSoTCTheoHocKy,

                    };

                }
                else if (hocKy < mainTree.hocKyHienTai)
                {
                    hocKyDataTree = new MonHocTheoHocKy()
                    {
                        id = "hockyData" + hocKy.ToString(),
                        name = "Tổng số tín chỉ đã hoàn thành trong học kỳ " + hocKy.ToString() + " là " + tongSoTCTheoHocKy,

                    };

                }
                else
                {
                    hocKyDataTree = new MonHocTheoHocKy()
                    {
                        id = "hockyData" + hocKy.ToString(),
                        name = "Tổng số tín chỉ cần hoàn thành trong học kỳ " + hocKy.ToString() + " là " + tongSoTCTheoHocKy,
                    };
                }
                hocKyTree = new MonHocTheoHocKy()
                {
                    id = "hocky" + hocKy.ToString(),
                    name = "<br/>Học kỳ " + hocKy.ToString(),

                    data = hocKyDataTree,
                    children = monHocTheoHocKyTree.ToArray()
                };
                treeChildren.Add(hocKyTree);
            }

           
            MonHocTheoHocKy thongtindata = null;
            //string svChonTN="";
            //foreach(var strItem in mainTree.LuaChonLuanVanThiTN)
            //{
            //    if(strItem.Selected==true && strItem.Value=="1")
            //    {
            //        svChonTN = strItem.Text;
            //        break;
            //    }
            //}
            //if (svChonTN != "")
            //{
            //    MonHocTheoHocKy hocKyTN = new MonHocTheoHocKy()
            //    {
            //        id = "nodethi",
            //        name = "<br/>" + svChonTN,

            //    };
            //    treeChildren.Add(hocKyTN);

            //    }
                MonHocTheoHocKy hocKyCuoi = new MonHocTheoHocKy()
                {
                    id = "nodeCuoi",
                    name = "<p style=' background-color:#551A8B; height:50px;text-align:center'>Học kỳ " + mainTree.HocKySVChon.ToString() + "<br/>Là học kỳ tốt nghiệp</p>",

                    data = null,
                    children = null
                };
                treeChildren.Add(hocKyCuoi);
            

            thongtindata = new MonHocTheoHocKy()
            {
                id = "ttdataroot",
                name = "Ngành chính: " + sv.Lop.NganhDaoTao.TenNganh + "<br/>Lớp: " + sv.LopID + "<br/>ĐTBTL ngành chính: " + Math.Round(sv_tichLuyNganhChinh.TrungBinhTichLuy.Value, 2),
            };
            mainTree = new MonHocTheoHocKy()
            {
                id = "root",
                name = "<b>" + sv.MSSV + "<br/>" + sv.HoLot + " " + sv.Ten + "</b>",
                data = thongtindata,
                children = treeChildren.ToArray(),

            };

            return Json(mainTree, JsonRequestBehavior.AllowGet);
        }

        public ActionResult HienDLL()
        {
            mainTree.HienThiDDL = true;
            return RedirectToAction("LoTrinhHocVuotHocCham");
        }
    }
}
